home *** CD-ROM | disk | FTP | other *** search
/ Risc World 3 / Risc World 3.iso / SOFTWARE / ISSUE3 / PD / VICE / !ViceRsrc / DocDRender < prev    next >
Text File  |  2002-07-07  |  20KB  |  815 lines

  1. THE DIGITAL RENDERER MODULE, V0.50
  2. ==================================
  3.  
  4.  
  5.  
  6. IMPORTANT NOTES FOR VERSION 0.50:
  7. *********************************
  8.  
  9. There's a new call to activate the DigitalRenderer using the 16bit sound
  10. system where available: DigitalRenderer_Activate16. Normally you'll want
  11. to use this in preference over DigitalRenderer_Activate (unless you want
  12. more than 2 channels because the 16bit sound system doesn't support more);
  13. in case the call fails, use the old one.
  14. 16bit sound automatically expands mono samples to stereo and scales them
  15. according to the currently active volume, so you don't have to take care
  16. of any of these things.
  17.  
  18. The parameters to the SWI DigitalRenderer_SetDefaults (&4f70e) have changed
  19. slightly, i.e. r5 was added. I don't know of anyone (except for myself) using
  20. the features of 0.40 yet, so I hope this won't pose problems to anyone. But
  21. the addition of 16bit sound required a new parameter and I didn't want to
  22. define a new SWI just for the default frequency, although it'd have been
  23. the cleanest solution.
  24.  
  25.  
  26.  
  27. IMPORTANT NOTES FOR VERSION 0.40:
  28. *********************************
  29.  
  30. Since version 0.40 Digital Renderer uses voice generators; see the short
  31. paragraph at the end of this section for what this means. Another addition
  32. in this version is the filing system DRender: which allows Unix-like writing
  33. of samples to a pseudo-device for playback. See below.
  34.  
  35. This module provides a polling-, call-back or streaming interface between
  36. applications and the sound system. It should be used if you wish to play back a
  37. sample of unknown length like when emulating another computer's sound system
  38. and/or control playback from applications which might be mapped out during WIMP
  39. polls. Otherwise you better use voice generators. It has been extended and
  40. modified a lot since its first version which provided just the single-buffer
  41. polling interface used for my port of Frodo. With Doom It Yourself came the
  42. addition of the call back handler (but newer versions of DIY have moved to
  43. voice handlers), the Vice port required support for 16bit samples (which are
  44. internally converted to 8bit ulaw ATM, though) and since Vice1.5 there's
  45. also been a streaming interface. Maybe I'll add a filing system one day so
  46. you can dump samples directly to a streaming device a la Unix; that should
  47. simplify some ports, but ATM I don't see a big need for this.
  48.  
  49. Prior to activating it you can choose whether you want to use a streaming
  50. approach by configuring the number of buffers to a value larger than 0. In
  51. this case you can stream in numbuffers * buffersize samples, but you have to
  52. take care that you don't write more samples to avoid wraparound because the
  53. streaming calls are non-blocking (use DigitalRenderer_StreamStatistics to
  54. read the number of filled buffers and only fill the free ones). I hate blocking
  55. calls.
  56.  
  57. You tell it the number of channels, sample period and buffer size (as needed for
  58. SWI Sound_Configure) when activating it. The module will then claim buffer(s) of
  59. the specified size, depending on the mode you're running in:
  60.  
  61. 1) Call-back interface: no buffer will be needed.
  62. 2) Normal, single-buffer interface (numbuffers = 0): one buffer will be needed.
  63. 3) Streaming interface: numbuffers buffers are claimed.
  64.  
  65. (where numbuffers is the value passed to DigitalRenderer_NumBuffers)
  66.  
  67. Your job as a client is either polling with DigitalRenderer_ReadState (single)
  68. or DigitalRenderer_StreamStatistics (streaming) and providing new samples when
  69. needed using DigitalRenderer_New[16Bit]Sample (single) or
  70. DigitalRenderer_Stream[16Bit]Samples (streaming), or providing a buffer fill
  71. handler that'll be called by the module when the sample buffer has to be filled
  72. and therefore must reside in non-mappable memory.
  73.  
  74. DigitalRenderer only supports 8 bit logarithmic sound ATM since I have absolutely
  75. no documentation about 16 bit linear sound (and the PRMs are pretty useless as
  76. far as DMA- and Channel-Handlers are concerned). If any of you provided me with
  77. the necessary docs I might update it.
  78.  
  79. Voice Generators:
  80. The old versions of the Digital Renderer module replaced the channel handler
  81. which is not something one should normally do, but it worked well enough. Now
  82. I finally got around to changing that behaviour to use the much more standardized
  83. voice generators and thereby reduce compatibility issues in the future. The
  84. change is not entirely transparent, though. A channel handler sees the start
  85. of the sound buffer whereas a voice generator gets a pointer at a certain offset
  86. into the buffer and an incrementor. In order not to break old software what I
  87. do is always claim exactly as many channels as specified and fill all channels
  88. in the voice handler for the first channel, ignoring the others, so everything
  89. should look exactly like it used to to the outside world. Vice for instance handles
  90. it fine, but I can't guarantee that there aren't apps that can't stomach the change
  91. and need adapting. It was a change worth doing, though, since the old channel
  92. handler approach was always a bit of a pain in the neck. While I was at it I also
  93. ironed out a very tricky bug (hopefully) that may have caused very rare crashes.
  94.  
  95. Filing System DRender:
  96. There is now a filing system "DRender:". What for, you ask? Well, this allows
  97. using samples like on Unix by writing them to a pseudo-device (/dev/dsp). All
  98. you have to do is first configure the defaults (see SWI DigitalRenderer_SetDefaults
  99. or the command DRenderDefaults), open the file and pipe the data in. If you're
  100. running in a TaskWindow you don't even have to take care you don't write too much
  101. data because the module will automatically sleep using UpCall 6 when the buffer
  102. is full (that's the same UpCall the TaskWindow uses to yield control to other
  103. tasks and means that the computer doesn't freeze for the duration). If you're
  104. using this interface from an application, you should check the number of free
  105. buffers using SWI DigitalRenderer_StreamStatistics, however.
  106. The filing system uses the streaming interface. Only one file can be opened
  107. on this filing system. When it's opened, the default values are activated
  108. (number of channels, number of buffers, sample period, ...) and the data is
  109. streamed into the buffers (and the music starts). This might come in very
  110. handy if you're porting applications from Unix. Bear in mind, however, that
  111. the file opened on DRender: should not be buffered, otherwise you might get
  112. strange dropout effects.
  113. NOTE: there is a problem with the *copy command which doesn't work with the
  114. DRender: filing system (at least not in a TaskWindow). I don't know exactly
  115. why that is, maybe copy can't stomach the UpCall or stops interrupts, I just
  116. advise you not to use that command but rather OS_Find / OS_GBPB combinations.
  117.  
  118.  
  119.  
  120. The DigitalRenderer uses SWI chunk &4f700 and filing system number 167 (both
  121. officially registered). It provides the following SWI calls:
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129. DigitalRenderer_Activate        SWI &4F700
  130. ========================
  131.  
  132.  
  133. On Entry:
  134. ---------
  135.  
  136. R0    bits 0-7: number of channels, will get rounded up to (1,2,4,8).
  137.     bit 31: clear ==> use polling, otherwise call back buffer fill code.
  138. R1    Sample length (bytes per channel, must be a multiple of 16 bytes)
  139. R2    Sample period (microseconds between reading two consecutive sample bytes)
  140. R3    pointer to buffer fill code if R0 bit 31 set.
  141.  
  142.  
  143. On Exit:
  144. --------
  145.  
  146. ---
  147.  
  148.  
  149. Usage:
  150. ------
  151.  
  152. Your application must call this SWI to take over the sound system. For typical
  153. values of sample length and sample period see PRM 4. Once (successfully)
  154. activated things like the system beep won't work any more.
  155. This call activates the old 8bit system. Use DigitalRenderer_Activate16 to try
  156. using 16bit sound.
  157.  
  158.  
  159. Sample length:
  160. --------------
  161.  
  162. As documented in the PRMs, this denotes the number of bytes per channel to use
  163. as DMA buffer. Note that at least newer machines (RO3.7, probably due to 16bit
  164. sound) seem to have trouble extending this beyond 512 bytes even in 1 channel
  165. mode! The buffer size may affect your playback code if it relies getting the
  166. buffer size you specify to this call. You can read the actual buffer size using
  167. SWI "Sound_Configure" with r0-r5 = 0 which will return the buffer size actually
  168. available in r1.
  169. You're subject to the DMA buffer size in case you're providing your own buffer
  170. fill code or you're using the buffer-oriented calls DigitalRenderer_NewSample
  171. and DigitalRenderer_New16BitSample. The streaming interface works even if the
  172. DMA buffer size differs from the configured size: the requested buffer size
  173. will be the granularity of the ring buffer which could have any size; since
  174. only buffers that are entirely filled can be played back it's still not
  175. advisable to make the buffers too big, however.
  176.  
  177.  
  178. Buffer Fill Code:
  179. -----------------
  180.  
  181. The buffer fill code has the following entry/exit conditions:
  182.  
  183. On Entry:
  184. ---------
  185. R0    *buffer (in DMA space)
  186. R1    *LinToLog (8kB lookup table)
  187. R2    buffer length
  188.  
  189. Processor is in IRQ mode with IRQs enabled. Therefore do not use r14_irq under
  190. any circumstances!
  191.  
  192. On Exit:
  193. --------
  194. Except for r13_irq no registers have to be preserved. The routine must
  195. return using "LDMIA sp!,{pc}" (the return address is pushed to the stack
  196. _before_ the routine is called).
  197.  
  198.  
  199. The buffer fill code has to fill the buffer in the format the VIDC needs, i.e.
  200. all channels interleaved, each channel in 8bit u-law.
  201.  
  202.  
  203.  
  204. Errors:
  205. -------
  206.  
  207.     - already active
  208.     - can't claim memory for buffer / handler
  209.     - bad buffer size (not a multiple of 16)
  210.  
  211.  
  212.  
  213.  
  214.  
  215. DigitalRenderer_Deactivate        SWI &4F701
  216. ==========================
  217.  
  218.  
  219. On Entry:
  220. ---------
  221.  
  222. ---
  223.  
  224.  
  225. On Exit:
  226. --------
  227.  
  228. ---
  229.  
  230.  
  231. Usage:
  232. ------
  233.  
  234. If your application doesn't need sound any more it must return control to the
  235. old handlers by issuing this SWI.
  236.  
  237.  
  238. Errors:
  239. -------
  240.  
  241.     - not active
  242.  
  243.  
  244.  
  245.  
  246.  
  247. DigitalRenderer_Pause            SWI &4F702
  248. =====================
  249.  
  250.  
  251. On Entry:
  252. ---------
  253.  
  254. ---
  255.  
  256.  
  257. On Exit:
  258. --------
  259.  
  260. ---
  261.  
  262.  
  263. Usage:
  264. ------
  265.  
  266. This SWI suspends sound playback (disabling DMA on sample buffers and so on).
  267. In contrast to deactivating DR this will not install the old handlers but merely
  268. mute the entire sound system.
  269.  
  270.  
  271. Errors:
  272. -------
  273.  
  274.     - not active
  275.  
  276.  
  277.  
  278.  
  279.  
  280. DigitalRenderer_Resume            SWI &4F703
  281. ======================
  282.  
  283.  
  284. On Entry:
  285. ---------
  286.  
  287. ---
  288.  
  289.  
  290. On Exit:
  291. --------
  292.  
  293. ---
  294.  
  295.  
  296. Usage:
  297. ------
  298.  
  299. Call this to resume playback after it was paused.
  300.  
  301.  
  302. Errors:
  303. -------
  304.  
  305.     - not active
  306.  
  307.  
  308.  
  309.  
  310.  
  311. DigitalRenderer_GetTables        SWI &4F704
  312. =========================
  313.  
  314.  
  315. On Entry:
  316. ---------
  317.  
  318. ---
  319.  
  320.  
  321. On Exit:
  322. --------
  323.  
  324. For 8bit sound only, otherwise undefined:
  325.  
  326. R0    pointer to 8k LinToLog table for translating 13 bit signed integers
  327.     to 8 bit logarithmic samples as required by the VIDC, scaled to the
  328.     currently selected volume (--> SWI Sound_Volume)
  329.  
  330. R1    Pointer to 256 byte LogScale table for scaling 8 bit logarithmic
  331.     samples according to the currently selected volume.
  332.  
  333.  
  334. Errors:
  335. -------
  336.  
  337.     - not active
  338.  
  339.  
  340.  
  341.  
  342.  
  343. DigitalRenderer_ReadState        SWI &4F705
  344. =========================
  345.  
  346.  
  347. On Entry:
  348. ---------
  349.  
  350. ---
  351.  
  352.  
  353. On Exit:
  354. --------
  355.  
  356. R0    Digital Renderer State. Bits and their meaning when set:
  357.  
  358.     0:    DigitalRenderer active
  359.     1:    New sample data required
  360.     2:    Buffer overflow occurred
  361.     5:    16bit sound hardware used
  362.  
  363.  
  364. Usage:
  365. ------
  366.  
  367. Call this SWI to poll DigitalRenderer in single-buffer mode. If Bit 1 is set you
  368. have to provide a new sample buffer by calling DigitalRenderer_NewSample. Bit 2
  369. lets you check for buffer overflows (i.e. your application took too long to provide
  370. the next sample).
  371. If you're using the call-back method or the streaming interface, bits 1 and 2 are
  372. undefined. For streaming interface, use SWI DigitalRenderer_StreamStatistics.
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379. DigitalRenderer_NewSample        SWI &4F706
  380. =========================
  381.  
  382.  
  383. On Entry:
  384. ---------
  385.  
  386. R0    Pointer to buffer holding new samples (8bit ulaw)
  387.  
  388.  
  389. On Exit:
  390. --------
  391.  
  392. ---
  393.  
  394.  
  395. Usage:
  396. ------
  397.  
  398. Don't call this SWI if you're using the call-back method or the streaming interface,
  399. this is for single-buffer polling only. Call this when DigitalRenderer_ReadState
  400. returned with Bit 1 set. The buffer must have the correct size (number of channels
  401. times Sample length) and contain data that can be sent directly to the VIDC, i.e. 8
  402. bit logarithmic data, interleafed for multiple channels.
  403.  
  404.  
  405. Errors:
  406. -------
  407.  
  408.     - not active
  409.  
  410.  
  411.  
  412.  
  413.  
  414. DigitalRenderer_New16BitSample        SWI &4F707
  415. ==============================
  416.  
  417. On Entry:
  418. ---------
  419.  
  420. R0    Pointer to buffer holding new samples (16bit linear)
  421.  
  422. On Exit:
  423. --------
  424.  
  425. ---
  426.  
  427.  
  428. Usage:
  429. ------
  430.  
  431. Same as DigitalRenderer_NewSample, but the source buffer holds 16bit linear samples
  432. (and hence has to be twice the size of the one used by DigitalRenderer_NewSample).
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439. DigitalRenderer_BufferStatistics    SWI &4F708
  440. ================================
  441.  
  442. On Entry:
  443. ---------
  444.  
  445. ---
  446.  
  447. On Exit:
  448. --------
  449.  
  450. R0    Buffers played
  451. R1    Buffers provided by application
  452.  
  453.  
  454. Usage:
  455. ------
  456.  
  457. A simple method to get statistical information about the playback history in
  458. single-buffer polling mode. Both counters will be reset to zero when the
  459. DigitalRenderer is activated.
  460.  
  461.  
  462.  
  463.  
  464.  
  465. DigitalRenderer_NumBuffers        SWI &4F709
  466. ==========================
  467.  
  468. On Entry:
  469. ---------
  470.  
  471. R0    new number of buffers to use in streaming interface, or -1 to read.
  472.  
  473. On Exit:
  474. --------
  475.  
  476. R0    number of buffers currently allocated.
  477.  
  478.  
  479. Usage:
  480. ------
  481.  
  482. This call must be issued before DigitalRenderer_Activate and initializes
  483. the streaming interface (if R0 > 0). In this mode you can pipe samples into
  484. a ring buffer containing r0 buffers using the DigitalRenderer_Stream*Samples
  485. SWIs. Each buffer is as large as the one specified when activating the
  486. DigitalRenderer (which ideally is the size of the sound hardware's). This
  487. system basically allows caching a large number of samples. You can switch
  488. off the streaming interface when the DigitalRenderer is inactive calling with
  489. R0 = 0.
  490.  
  491.  
  492.  
  493.  
  494. DigitalRenderer_StreamSamples        SWI &4F70A
  495. =============================
  496.  
  497. On Entry:
  498. ---------
  499.  
  500. R0    Pointer to buffer holding 8bit ulaw samples
  501. R1    Number of samples
  502.  
  503. On Exit:
  504. --------
  505.  
  506. ---
  507.  
  508.  
  509. Usage:
  510. ------
  511.  
  512. Provide 8bit ulaw samples to the ring buffer in streaming mode. The format is
  513. as required for the sound hardware (see PRM4). The number of samples can be
  514. any size, but should normally not be larger than the ring buffer size or the
  515. call will either block or samples will be truncated, depending on the stream
  516. flags (DigitalRenderer_StreamFlags).
  517.  
  518.  
  519.  
  520.  
  521. DigitalRenderer_Stream16BitSamples    SWI &4F70B
  522. ==================================
  523.  
  524. On Entry:
  525. ---------
  526.  
  527. R0    Pointer to buffer holding 16bit signed linear samples
  528. R1    Number of samples (not bytes!)
  529.  
  530. On Exit:
  531. --------
  532.  
  533. ---
  534.  
  535.  
  536. Usage:
  537. ------
  538.  
  539. Same as DigitalRenderer_StreamSamples, but the samples are in 16bit signed linear
  540. rather than 8bit ulaw.
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547. DigitalRenderer_StreamStatistics    SWI &4F70C
  548. ================================
  549.  
  550. On Entry:
  551. ---------
  552.  
  553. ---
  554.  
  555. On Exit:
  556. --------
  557.  
  558. R0    Number of buffers filled and waiting to be played.
  559.  
  560.  
  561.  
  562.  
  563.  
  564. DigitalRenderer_StreamFlags        SWI &4F70D
  565. ===========================
  566.  
  567. On Entry:
  568. ---------
  569.  
  570. R0    EOR mask
  571. R1    AND mask (applied first)
  572.  
  573. On Exit:
  574. --------
  575.  
  576. R0    old stream flags
  577.  
  578.  
  579. Usage:
  580. ------
  581.  
  582. Use this to read and change the stream flags. ATM the following flags are defined,
  583. with the following meaning when set:
  584.  
  585.     1:    fill buffers with 0 on overruns, otherwise repeat last buffer
  586.     2:    use UpCall6 if more data is written to DRender: than fits the buffer.
  587.         That means the task sleeps, otherwise it has to do busy waiting.
  588.     4:    block if more samples are streamed than fit into the buffer
  589.  
  590. Use R0 = 0, R1 = -1 to read.
  591.  
  592.  
  593.  
  594.  
  595.  
  596. DigitalRenderer_SetDefaults        SWI &4F70E
  597. ===========================
  598.  
  599. On Entry:
  600. ---------
  601.  
  602. R0    number of channels or 0 to read
  603. R1    format (1: 8bit ulaw, 2 16bit signed linear, 3: 16bit signed linear channel-swapped)
  604.     or 0 to read
  605. R2    sample period or 0 to read
  606. R3    buffer size per channel or 0 to read
  607. R4    number of buffers for streaming interface
  608. R5    sample frequency; positive values mean: use 16bit RISC OS sound in preference
  609.  
  610. On Exit:
  611. --------
  612.  
  613. R0-R5    currently active values
  614.  
  615.  
  616. Usage:
  617. ------
  618.  
  619. IMPORTANT NOTE:
  620. Between version 0.40 and 0.50, R5 was added. In case you were using this call
  621. in version 0.40, you'll have to change your code. See the preamble to this
  622. document for more.
  623.  
  624. Use this SWI to specify the format and the total buffer size of the file you
  625. want to write to the DRender: filing system. The defaults are for 1 channel,
  626. 22kHz, 1 second buffering. In case the default frequency is positive, 16bit
  627. sound is tried first, falling back to 8bit if 16bit failed (like on older
  628. hardware), otherwise 8bit is used from the start.
  629.  
  630.  
  631.  
  632.  
  633.  
  634. DigitalRenderer_Activate16        SWI &4F70F
  635. ==========================
  636.  
  637. On Entry:
  638. ---------
  639.  
  640. R0    number of channels, must be 1 or 2 (this is a limitation of 16bit RISC OS sound)
  641. R1    buffer size per channel
  642. R2    frequency
  643. R3    flags
  644.     bit 0:    restore previous handler on exit
  645.  
  646. On Exit:
  647. --------
  648.  
  649. all registers preserved.
  650.  
  651.  
  652. Usage:
  653. ------
  654.  
  655. Use this SWI to activate the DigitalRenderer using the new 16bit RISC OS sound
  656. rather than the old 8bit system. All other SWIs automatically adapt to the system
  657. chosen without needing to worry about internal details. The call will return with
  658. an error in case no 16bit sound is available.
  659. In stereo mode, the samples are by default assumed to be in the correct order for
  660. left/right channel. If this is not the case, you'll have to call the new SWI
  661. DigitalRenderer_SampleFormat with format 3 (16bit signed linear swapped).
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668. DigitalRenderer_GetFrequency        SWI &4F710
  669. ============================
  670.  
  671. On Entry:
  672. ---------
  673.  
  674. ---
  675.  
  676.  
  677. On Exit:
  678. --------
  679.  
  680. R0    sample frequency used, or 0 in case the DigitalRenderer is off.
  681.  
  682.  
  683. Usage:
  684. ------
  685.  
  686. Use this call to read the sample frequency in use (may deviate from the one you
  687. specified to DigitalRenderer_Activate[16]).
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694. DigitalRenderer_ActivateAuto        SWI &4F711
  695. ============================
  696.  
  697. On Entry:
  698. ---------
  699.  
  700. R0    number of channels
  701. R1    buffer size per channel
  702. R2    frequency
  703.  
  704.  
  705. On Exit:
  706. --------
  707.  
  708. all registers preserved
  709.  
  710.  
  711. Usage:
  712. ------
  713.  
  714. The call for the impatient. This call first tries DigitalRenderer_Activate16 with
  715. R3 = 1 (i.e. restore the previous handler). If that call fails, it converts the
  716. frequency to the nearest sample period available and calls DigitalRenderer_Activate.
  717. Only if that call fails does it return with an error.
  718.  
  719.  
  720.  
  721.  
  722.  
  723. DigitalRenderer_SampleFormat        SWI &4F712
  724. ============================
  725.  
  726. On Entry:
  727. ---------
  728.  
  729. R0    new format (see DigitalRenderer_SetDefaults) or 0 to read
  730.  
  731.  
  732. On Exit:
  733. --------
  734.  
  735. R0    format currently used
  736.  
  737.  
  738. Usage:
  739. ------
  740.  
  741. This call allows you to change the sample format from the default. The most
  742. important application of this call is to swap left and right channel in 16bit
  743. stereo mode. Changing the format in 8bit mode doesn't have an effect. The call
  744. can be issued at arbitrary times even when the stream is open.
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755. COMMANDS:
  756. =========
  757.  
  758.  
  759. DRenderOff
  760.     Switch off the digital renderer module and close the DRender: filing
  761.     system if it was opened.
  762.  
  763.  
  764. DRenderDefaults [-c # -f # -p # -s # -n #]
  765.     If no parameters given, print the current defaults, otherwise set
  766.     them. The defaults are used to specify the sample format of data
  767.     you want to write to the DRender: filing system (see also SWI
  768.     DigitalRenderer_SetDefaults). Parameters are
  769.     -c #: set number of channels (1,2,4,8)
  770.     -f #: set sample format: 1 for ubit ulaw, 2 for 16bit signed linear,
  771.           3 for 16 bit signed linear with left/right channel in wrong order
  772.     -p #: set sample period, e.g. 44 for 44kHz, 23 for 22kHz
  773.     -q #: set sample frequency in Hz. Specifying a positive value automatically
  774.           tries 16bit sound first, otherwise the old 8bit sound is used.
  775.     -s #: set buffer size per channel (keep it small)
  776.     -n #: set number of buffers to use in streaming interface. You should
  777.           make this large enough to buffer enough data to keep playback
  778.           stable (default is 43).
  779.  
  780.  
  781. DRenderStatus
  782.     Show a summary of the digital renderer status. In case of 8bit sound,
  783.     the sample period is shown, whereas for 16bit sound the frequency is
  784.     printed.
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793. LEGAL STUFF:
  794. ============
  795.  
  796.  
  797. The DigitalRenderer module is Freeware. You may use it for your own programs as
  798. long as this file is included unchanged. I won't be held responsible for any kind
  799. of damage resulting from the use of this module, use it entirely at your own risk.
  800.  
  801.  
  802.  
  803.  
  804.  
  805. CONTACT:
  806. ========
  807.  
  808.  
  809. Andreas Dehmel
  810. Am Schorn 18
  811. 82327 Tutzing
  812. Germany
  813.  
  814. email:    zarquon@t-online.de
  815.